Profiling of systems is often used to identify performance bottlenecks and to debug software. Generally, profiling refers to gathering data during the execution of software on a target system. The gathered data may include, for example, sampled program counter (PC) values, cache activity, bus activity and other general trace information. Once gathered, the data may be analyzed.
In one approach, the profiling software executes on the target processor along with the software targeted for profiling. Since the profiling software executes on the same processor targeted for profiling, the profiling software will influence behavior of the target processor and may do so in a manner that skews performance of the target processor.
In another approach, the profiling software executes on a co-processor to the target processor. By executing profiling programs on the co-processor, issues of skewed performance of the target processor may be avoided. However, the target processor may require modifications in order to tag instructions to be profiled, and making these modifications may be time consuming. Furthermore, memory shared between the target processor and the co-processor may skew performance of the target processor and make analysis difficult.
The present invention may address one or more of the above issues.